# 作者: 肖老师
# 2024年11月13日03时42分08秒
# xxxrlmk@163.com


# 分而治之
demo_list = [3, 3, 9, 6, 7, 10, 7, 6]  # 8个数

result = 0
for i in demo_list:
    result ^= i

# 最终结果
# 0000 1001  9
# 0000 1010  10
# 0000 0011
print(result)

# 拿一个数，和其负数进行按位与，就可以得到最低位的值(补码原理)
split_flag = result & -result
print(split_flag)

result1 = 0
result2 = 0
# 分堆，分成两堆
for i in demo_list:
    if i & split_flag:
        # print(f'堆1 {i}')
        result1 ^= i
    else:
        # print(f'堆2 {i}')
        result2 ^= i

print(f'出现一次的两个数分别是{result1} ,{result2}')
